package com.ruoyi.plugin.config;

import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.core.io.ClassPathResource;
import java.io.File;

/**
 * @author yeoman
 * @date 2025/2/4 12:36
 * @description
 */
@Configuration
public class SeleniumWebDriverConfig {

    /**
     * 配置 ChromeDriver 网络下载
     * 确保Spring关闭时调用quit方法
     * @return ChromeDriver
     */
    //@Bean(destroyMethod = "quit")
    //public ChromeDriver chromeDriver() {
    //    // 自动下载并配置 ChromeDriver
    //    WebDriverManager.chromedriver().setup();
    //    ChromeOptions options = new ChromeOptions();
    //    // 启动时最大化窗口
    //    options.addArguments("--start-maximized");
    //    // 不打开浏览器窗口
    //    options.addArguments("--headless");
    //    // 禁用GPU加速
    //    options.addArguments("--disable-gpu");
    //    return new ChromeDriver(options);
    //}

    /**
     * 配置 ChromeDriver 本地驱动
     * 确保Spring关闭时调用quit方法
     * 使用多例，因为可能会打开多个浏览器窗口，多线程同步
     * @return ChromeDriver
     */
    @Bean(destroyMethod = "quit")
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    public ChromeDriver chromeDriver() throws Exception {
        // 从resources目录读取chromedriver文件
        ClassPathResource resource = new ClassPathResource("chromedriver/chromedriver141");
        File chromedriverFile = resource.getFile();
        
        // 设置可执行权限
        chromedriverFile.setExecutable(true);
        
        // 设置chromedriver路径
        System.setProperty("webdriver.chrome.driver", chromedriverFile.getAbsolutePath());

        // 配置 ChromeOptions
        ChromeOptions options = new ChromeOptions();
         options.addArguments("--headless");
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-dev-shm-usage");
        
        return new ChromeDriver(options);
    }

}
